/** @format */

import { defineStore } from 'pinia'

// 导入 登录、获取用户信息 接口函数
import { loginApi, getUserInfoApi } from '@/api/user'

// 导入本地存储管理token的函数
import { setToken, getToken, removeToken } from '@/utils/token'

// 定义并导出
export const useUserStore = defineStore('user', {
    // 定义共享的数据源
    state: () => ({
        // 调用 getToken() 函数目的是实现 token 的持久化，让 pinia 中的 token 刷新不丢失
        token: getToken() || '',
        // 用户信息
        userInfo: {}
    }),
    // 修改数据的函数
    actions: {
        // 设置 token
        setToken(token) {
            // 给 pinia 中的 token 赋值
            this.token = token
            // 在本地存储中保存一份
            setToken(token)
        },
        // 设置用户信息
        setUserInfo(userInfo) {
            this.userInfo = userInfo
        },
        // 登录
        async loginAction(loginForm) {
            // 发起登录请求(调用登录接口)
            // await 只能获取成功态的 Promise 实例结果
            const resp:any = await loginApi(loginForm)
            // 解构出 token
            const { token } = resp
            // 对 token 赋值
            this.setToken(token)
        },
        // 获取用户信息
        async getUserInfoAction() {
            try {
                // 发请求（调用接口函数）
                const userInfo = await getUserInfoApi()
                // 设置 userInfo
                this.setUserInfo(userInfo)
            } catch (e) { }
        },
        // 退出
        logout() {
            this.token = ''
            removeToken()

            this.userInfo = {}
        }
    }
})
